home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Expert
/
Windows Expert.iso
/
network
/
atre12.zip
/
LF.ZIP
/
FILEDLG.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-07-05
|
11KB
|
355 lines
/*--------------------------------
FILEDLG.C -- open and close
file dialog boxes
----------------------------------*/
#include <windows.h>
#include "filedlg.h"
BOOL FAR PASCAL FileOpenDlgProc(HWND, WORD, WORD, LONG);
BOOL FAR PASCAL FileSaveDlgProc(HWND, WORD, WORD, LONG);
BOOL FAR PASCAL OutFileDlgProc (HWND, WORD, WORD, LONG);
LPSTR lstrchr (LPSTR str, char ch);
LPSTR lstrrchr (LPSTR str, char ch);
static char szDefExt[5];
static char szOutDefExt[5];
static char szFName[96];
static char szFileSpec[16];
static char szOutFileSpec[16];
static POFSTRUCT pof;
static WORD wFileAttr, wStatus;
int DoFileOpenDlg (HANDLE hInst, HWND hwnd, char *szFileSpecIn,
char *szDefExtIn, WORD wFileAttrIn,
char *szFNameOut, POFSTRUCT pofIn)
{
FARPROC lpfnFileOpenDlgProc;
int iReturn;
lstrcpy (szFileSpec, szFileSpecIn);
lstrcpy (szDefExt, szDefExtIn);
wFileAttr = wFileAttrIn;
pof = pofIn;
lpfnFileOpenDlgProc = MakeProcInstance (FileOpenDlgProc, hInst);
iReturn = DialogBox(hInst, "FileOpen", hwnd, lpfnFileOpenDlgProc);
FreeProcInstance(lpfnFileOpenDlgProc);
lstrcpy(szFNameOut, szFName);
return iReturn;
}
int DoFileSaveDlg (HANDLE hInst, HWND hwnd, char *szFileSpecIn,
char *szDefExtIn, WORD *pwStatusOut,
char *szFNameOut, POFSTRUCT pofIn)
{
FARPROC lpfnFileSaveDlgProc;
int iReturn;
lstrcpy (szFileSpec, szFileSpecIn);
lstrcpy (szDefExt, szDefExtIn);
pof = pofIn;
lpfnFileSaveDlgProc = MakeProcInstance (FileSaveDlgProc, hInst);
iReturn = DialogBox(hInst, "FileSave", hwnd, lpfnFileSaveDlgProc);
FreeProcInstance(lpfnFileSaveDlgProc);
lstrcpy(szFNameOut, szFName);
*pwStatusOut = wStatus;
return iReturn;
}
int DoOutFileDlg (HANDLE hInst, HWND hwnd, char *szFileSpecIn,
char *szDefExtIn, WORD *pwStatusOut,
char *szFNameOut, POFSTRUCT pofIn)
{
FARPROC lpfnOutFileDlgProc;
int iReturn;
lstrcpy (szOutFileSpec, szFileSpecIn);
lstrcpy (szOutDefExt, szDefExtIn);
pof = pofIn;
lpfnOutFileDlgProc = MakeProcInstance (OutFileDlgProc, hInst);
iReturn = DialogBox(hInst, "OutFile", hwnd, lpfnOutFileDlgProc);
FreeProcInstance(lpfnOutFileDlgProc);
lstrcpy(szFNameOut, szFName);
*pwStatusOut = wStatus;
return iReturn;
}
BOOL FAR PASCAL FileOpenDlgProc(HWND hDlg, WORD message,
WORD wParam, LONG lParam)
{
char cLastChar;
short nEditLen;
switch (message)
{
case WM_INITDIALOG:
SendDlgItemMessage (hDlg, IDD_FNAME, EM_LIMITTEXT, 80, 0L);
DlgDirList(hDlg, szFileSpec, IDD_FLIST, IDD_FPATH, wFileAttr);
SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
return TRUE;
case WM_COMMAND:
switch (wParam)
{
case IDD_FLIST :
switch (HIWORD(lParam))
{
case LBN_SELCHANGE :
if (DlgDirSelect (hDlg, (LPSTR)szFName, IDD_FLIST))
lstrcat ((LPSTR)szFName, (LPSTR)szFileSpec);
SetDlgItemText(hDlg, IDD_FNAME, szFName);
return TRUE;
case LBN_DBLCLK :
if (DlgDirSelect (hDlg, szFName, IDD_FLIST))
{
lstrcat (szFName, szFileSpec);
DlgDirList(hDlg, szFName, IDD_FLIST, IDD_FPATH, wFileAttr);
SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
}
else
{
SetDlgItemText(hDlg, IDD_FNAME, szFName);
SendMessage(hDlg, WM_COMMAND, IDOK, 0L);
}
return TRUE;
}
break;
case IDD_FNAME:
if (HIWORD(lParam) == EN_CHANGE)
EnableWindow(GetDlgItem(hDlg, IDOK),
(BOOL) SendMessage(LOWORD(lParam),
WM_GETTEXTLENGTH, 0, 0L));
return TRUE;
case IDOK :
GetDlgItemText (hDlg, IDD_FNAME, szFName, 80);
nEditLen = lstrlen(szFName);
cLastChar = *AnsiPrev(szFName, szFName + nEditLen);
if (cLastChar == '\\' || cLastChar == ':')
lstrcat(szFName, szFileSpec);
if(lstrchr(szFName, '*') || lstrchr(szFName, '?'))
{
if (DlgDirList (hDlg, szFName, IDD_FLIST,
IDD_FPATH, wFileAttr))
{
lstrcpy(szFileSpec, szFName);
SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
}
else
MessageBeep(0);
return TRUE;
}
lstrcat (lstrcat(szFName, "\\"), szFileSpec);
if (DlgDirList (hDlg, szFName, IDD_FLIST,
IDD_FPATH, wFileAttr))
{
lstrcpy(szFileSpec, szFName);
SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
return TRUE;
}
szFName [nEditLen] = '\0';
if (-1 == OpenFile (szFName, pof, OF_READ | OF_EXIST))
{
lstrcat (szFName, szDefExt);
if (-1 == OpenFile (szFName, pof, OF_READ | OF_EXIST))
{
MessageBeep(0);
return TRUE;
}
}
lstrcpy (szFName,
AnsiNext(lstrrchr(pof->szPathName, '\\')));
OemToAnsi (szFName, szFName);
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL :
EndDialog(hDlg, FALSE);
return TRUE;
}
}
return FALSE;
}
BOOL FAR PASCAL FileSaveDlgProc (HWND hDlg, WORD message,
WORD wParam, LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
SendDlgItemMessage (hDlg, IDD_FNAME, EM_LIMITTEXT, 80, 0L);
DlgDirList(hDlg, szFileSpec, 0, IDD_FPATH, 0);
SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
return TRUE;
case WM_COMMAND:
switch(wParam)
{
case IDD_FNAME:
if (HIWORD(lParam) == EN_CHANGE)
EnableWindow(GetDlgItem (hDlg, IDOK),
(BOOL) SendMessage(LOWORD (lParam),
WM_GETTEXTLENGTH, 0, 0L));
return TRUE;
case IDOK :
GetDlgItemText (hDlg, IDD_FNAME, szFName, 80);
if (-1 == OpenFile (szFName, pof, OF_PARSE))
{
MessageBeep(0);
return TRUE;
}
if (!lstrchr (AnsiNext(lstrrchr(pof->szPathName, '\\')),
'.'))
lstrcat (szFName, szDefExt);
if (-1 != OpenFile (szFName, pof, OF_WRITE | OF_EXIST))
wStatus = 1;
else if (-1 != OpenFile (szFName, pof, OF_CREATE | OF_EXIST))
wStatus = 0;
else
{
MessageBeep(0);
return TRUE;
}
lstrcpy (szFName,
AnsiNext(lstrrchr(pof->szPathName, '\\')));
OemToAnsi (szFName, szFName);
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL :
EndDialog(hDlg, FALSE);
return TRUE;
}
}
return FALSE;
}
BOOL FAR PASCAL OutFileDlgProc (HWND hDlg, WORD message,
WORD wParam, LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
SendDlgItemMessage (hDlg, IDD_FNAME, EM_LIMITTEXT, 80, 0L);
DlgDirList(hDlg, szOutFileSpec, 0, IDD_FPATH, 0);
SetDlgItemText(hDlg, IDD_FNAME, szOutFileSpec);
return TRUE;
case WM_COMMAND:
switch(wParam)
{
case IDD_FNAME:
if (HIWORD(lParam) == EN_CHANGE)
EnableWindow(GetDlgItem (hDlg, IDOK),
(BOOL) SendMessage(LOWORD (lParam),
WM_GETTEXTLENGTH, 0, 0L));
return TRUE;
case IDOK :
GetDlgItemText (hDlg, IDD_FNAME, szFName, 80);
if (-1 == OpenFile (szFName, pof, OF_PARSE))
{
MessageBeep(0);
return TRUE;
}
if (!lstrchr (AnsiNext(lstrrchr(pof->szPathName, '\\')),
'.'))
lstrcat (szFName, szOutDefExt);
if (-1 != OpenFile (szFName, pof, OF_WRITE | OF_EXIST))
wStatus = 1;
else if (-1 != OpenFile (szFName, pof, OF_CREATE | OF_EXIST))
wStatus = 0;
else
{
MessageBeep(0);
return TRUE;
}
lstrcpy (szFName,
AnsiNext(lstrrchr(pof->szPathName, '\\')));
OemToAnsi (szFName, szFName);
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL :
EndDialog(hDlg, FALSE);
return TRUE;
}
}
return FALSE;
}
LPSTR lstrchr (LPSTR str, char ch)
{
while (*str)
{
if (ch == *str)
return str;
str = AnsiNext(str);
}
return NULL;
}
LPSTR lstrrchr (LPSTR str, char ch)
{
LPSTR strl = str + lstrlen(str);
do
{
if (ch == *strl)
return strl;
strl = AnsiPrev(str, strl);
}
while (strl > str);
return NULL;
}